package io.legado.app.ui.welcome

import android.content.Intent
import android.graphics.drawable.BitmapDrawable
import android.os.Bundle
import androidx.core.view.postDelayed
import io.legado.app.base.BaseActivity
import io.legado.app.constant.PreferKey
import io.legado.app.constant.Theme
import io.legado.app.databinding.ActivityWelcomeBinding
import io.legado.app.help.config.ThemeConfig
import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.main.MainActivity
import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding

open class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {

    override val binding by viewBinding(ActivityWelcomeBinding::inflate)

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        binding.ivBook.setColorFilter(accentColor)
        binding.vwTitleLine.setBackgroundColor(accentColor)
        // 避免从桌面启动程序后，会重新实例化入口类的activity
        if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
            finish()
        } else {
            binding.root.postDelayed(600) { startMainActivity() }
        }
    }



    /**
     * 设置系统栏的样式
     *
     * 本函数旨在根据当前的界面需求调整系统栏（如状态栏、导航栏）的显示效果
     * 它通过一系列的方法调用来实现全屏显示、自动设置状态栏颜色以及更新导航栏颜色的效果
     */
    override fun setupSystemBar() {
        // 将界面设置为全屏显示
        fullScreen()
        // 自动设置状态栏颜色，以适应不同的背景颜色，同时考虑是否为全屏模式
        setStatusBarColorAuto(backgroundColor, true, fullScreen)
        // 更新导航栏颜色以适应当前的主题风格
        upNavigationBarColor()
    }

    /**
     * 更新背景图片
     *
     * 根据用户偏好和主题配置更新欢迎屏幕的背景图片和元素可见性
     * 此方法重写了父类的[upBackgroundImage]方法，以实现特定的背景更新逻辑
     */
    override fun upBackgroundImage() {
        // 检查用户是否自定义了欢迎页面
        if (getPrefBoolean(PreferKey.customWelcome)) {
            // 使用kotlin.runCatching处理可能的异常
            kotlin.runCatching {
                // 根据当前主题选择相应的处理逻辑
                when (ThemeConfig.getTheme()) {
                    Theme.Dark -> getPrefString(PreferKey.welcomeImageDark)?.let { path ->
                        val size = windowManager.windowSize
                        BitmapUtils.decodeBitmap(path, size.widthPixels, size.heightPixels).let {
                            binding.tvLegado.visible(getPrefBoolean(PreferKey.welcomeShowTextDark))
                            binding.ivBook.visible(getPrefBoolean(PreferKey.welcomeShowIconDark))
                            binding.tvGzh.visible(getPrefBoolean(PreferKey.welcomeShowTextDark))
                            window.decorView.background = BitmapDrawable(resources, it)
                            return
                        }
                    }
                    else -> getPrefString(PreferKey.welcomeImage)?.let { path ->
                        val size = windowManager.windowSize
                        BitmapUtils.decodeBitmap(path, size.widthPixels, size.heightPixels).let {
                            binding.tvLegado.visible(getPrefBoolean(PreferKey.welcomeShowText))
                            binding.ivBook.visible(getPrefBoolean(PreferKey.welcomeShowIcon))
                            binding.tvGzh.visible(getPrefBoolean(PreferKey.welcomeShowText))
                            window.decorView.background = BitmapDrawable(resources, it)
                            return
                        }
                    }
                }
            }
        }
        super.upBackgroundImage()
    }

    /**
     * 启动主活动
     *
     * 此方法用于启动应用的主活动[MainActivity]它还会根据用户偏好
     * 决定是否额外启动阅读活动[ReadBookActivity]如果用户设置默认为阅读模式，
     * 则会启动阅读活动，否则仅启动主活动完成启动过程后，当前活动将结束
     */
    private fun startMainActivity() {
        // 启动主活动
        startActivity<MainActivity>()
        // 检查用户偏好设置，决定是否启动阅读活动
        if (getPrefBoolean(PreferKey.defaultToRead)) {
            startActivity<ReadBookActivity>()
        }
        // 结束当前活动
        finish()
    }

}

class Launcher1 : WelcomeActivity()
class Launcher2 : WelcomeActivity()
class Launcher3 : WelcomeActivity()
class Launcher4 : WelcomeActivity()
class Launcher5 : WelcomeActivity()
class Launcher6 : WelcomeActivity()